home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1996 February / macformat-034.iso / mac / Shareware City / Developers / simple-sockets-11-c / Simple Sockets 1.1 ƒ / Sample Apps / day_client / Source / MacDay.c < prev   
Encoding:
C/C++ Source or Header  |  1995-11-27  |  6.3 KB  |  333 lines  |  [TEXT/CWIE]

  1. /* 
  2.  * MacDay.c
  3.  *
  4.  * Macintosh Interface for the Daytime Client.
  5.  *
  6.  * Mike Trent 9/94
  7.  * 
  8.  * *MDT 11/27/95 Add Universal Headers #ifdefs
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <MacTCPCommonTypes.h>
  13.  #include "ip.h"
  14.  #include "iperr.h"
  15. // #define MAIN
  16. // #include "globals.h"
  17.  
  18.  
  19. /* defines */
  20. #define kBaseResID            128
  21. #define kMoveToFront        (WindowPtr) - 1L
  22. #define kUseDefaultProc        (void *)-1L
  23. #define kSleep                3600L
  24. #define kLeaveWhereItIs        false
  25.  
  26. #define mApple                128
  27. #define iAbout                1
  28.  
  29. #define mFile                129
  30. #define iQuit                1
  31.  
  32. #define mEdit                130                        /* dummy menu */
  33.  
  34. #define mConnection            131
  35. #define iGetTime            1
  36. #define iLocalNum            2
  37.  
  38. #define kIgnored            0
  39.  
  40.  
  41. void InitToolBox(void);
  42. void MenuBarInit(void);
  43. void DoEvent (EventRecord *eventPtr);
  44. void HandleMouseDown (EventRecord *eventPtr);
  45. void HandleMenuChoice (long menuChoice);
  46. void HandleConnection(short item);
  47. void DoAbout(void);
  48. void DoGetTime(char *host, char *port, char *data);
  49. void DrawDefault(DialogPtr dialog);
  50.  
  51. Boolean gDone = false;
  52.  
  53. main()
  54. {
  55.     EventRecord      event;
  56.     
  57.     MaxApplZone();
  58.     MoreMasters();    MoreMasters();    MoreMasters();    MoreMasters();
  59.     
  60.     InitToolBox();
  61.     
  62.     if (InitMacTCP() != noErr) {
  63.         SysBeep(3);
  64.         ExitToShell();
  65.     }
  66.     
  67.     MenuBarInit();
  68.     
  69.     gDone = false;
  70.     
  71.     while (gDone == false)
  72.     {
  73.         if (WaitNextEvent(everyEvent, &event, kSleep, nil))
  74.             DoEvent (&event);
  75.         else
  76.             ;//HandleNull();
  77.     }
  78.     DisposeMacTCP();
  79. }
  80.  
  81. void InitToolBox(void)
  82. {
  83.     InitGraf(&qd.thePort);
  84.     InitFonts();
  85.     InitWindows();
  86.     InitMenus();
  87.     TEInit();
  88.     InitDialogs(nil);
  89.     InitCursor();
  90. }
  91.  
  92. void MenuBarInit (void)
  93. {
  94.     Handle            menuBar;
  95.     MenuHandle        menu;
  96.     
  97.     menuBar = GetNewMBar(128);            /* read menus into menu bar */
  98.     if ( menuBar == nil )
  99.     {
  100.          SysBeep (3);
  101.          ExitToShell();
  102.      }
  103.     SetMenuBar(menuBar);                    /* install menus */
  104.     DisposHandle(menuBar);
  105.     AddResMenu(GetMHandle(128), 'DRVR');    /* add DA names to Apple menu */
  106.     DrawMenuBar();
  107.  
  108.     
  109.     //DrawMenuBar();
  110. }
  111.  
  112. void DoEvent (EventRecord *eventPtr)
  113. {
  114.     char    theChar;
  115.         
  116.     switch (eventPtr->what)
  117.     {
  118.         case mouseDown:
  119.             HandleMouseDown (eventPtr);
  120.             break;
  121.         case keyDown:
  122.         case autoKey:
  123.             theChar = eventPtr->message & charCodeMask;
  124.             if ((eventPtr->modifiers & cmdKey) != 0) 
  125.                 HandleMenuChoice (MenuKey (theChar));
  126.             break;
  127.     }
  128. }
  129.  
  130. /********** HandleMouseDown **********/
  131.  
  132. void HandleMouseDown (EventRecord *eventPtr)
  133. {
  134.     WindowPtr        whichWindow;
  135.     short            thePart;
  136.     long            menuChoice;
  137.     
  138.     thePart = FindWindow(eventPtr->where, &whichWindow);
  139.     
  140.     switch (thePart)
  141.     {
  142.         case inMenuBar:
  143.             menuChoice =  MenuSelect (eventPtr->where);
  144.             HandleMenuChoice(menuChoice);
  145.             break;
  146.         case inSysWindow:
  147.             SystemClick(eventPtr, whichWindow);
  148.             break;
  149.     }
  150. }
  151.  
  152.  
  153. /********** HandleMenuChoice **********/
  154.  
  155. void HandleMenuChoice (long menuChoice)
  156. {
  157.     short         menu;
  158.     short        item;
  159.     MenuHandle    appleMenu;
  160.     Str255        accName;
  161.     short        accNumber;
  162.  
  163.     
  164.     if (menuChoice != 0) 
  165.     {
  166.         menu = HiWord(menuChoice);
  167.         item = LoWord(menuChoice);
  168.         
  169.         switch (menu){
  170.         case mApple:
  171.             switch (item){
  172.             case iAbout:
  173.                 DoAbout();        
  174.                 break;
  175.             default:
  176.                 appleMenu = GetMHandle (mApple);
  177.                 GetItem (appleMenu, item, accName);
  178.                 accNumber = OpenDeskAcc(accName);
  179.                 break;
  180.             }
  181.             break;
  182.         case mFile:
  183.             if (item == iQuit) gDone = true;
  184.             break;
  185.         case mConnection:
  186.             HandleConnection(item);
  187.             break;
  188.         }
  189.         HiliteMenu (0);
  190.     }
  191. }
  192.  
  193. void HandleConnection(short item)
  194. {
  195.     char data[80], addr[80], port[10];
  196.     DialogPtr dialog;
  197.     short itemHit = 0;
  198.     short    t;
  199.     Handle    h;
  200.     Rect    r;
  201.  
  202.     switch (item) {
  203.     case iGetTime:
  204.         if ((dialog = GetNewDialog(128, nil, kMoveToFront)) == nil){
  205.             SysBeep(3);
  206.             return;
  207.         }
  208.         SetPort(dialog);
  209.         DrawDefault(dialog);
  210.         while ((itemHit != 1) && (itemHit != 2))
  211.             ModalDialog(nil, &itemHit);
  212.         if (itemHit == 2) {
  213.             DisposDialog(dialog);
  214.             return;
  215.         }
  216.         itemHit = 0;
  217.         GetDItem(dialog,3,&t,&h,&r);
  218.         GetIText(h, (unsigned char*)addr);
  219.         GetDItem(dialog,4,&t,&h,&r);
  220.         GetIText(h, (unsigned char *)port);
  221.         DisposDialog(dialog);
  222.  
  223.         addr[(addr[0]+1)] = 0;
  224.         port[(port[0]+1)] = 0;
  225.         DoGetTime(&(addr[1]), &(port[1]), data);
  226.         //data[0] = strlen(&(data[1]));
  227.         
  228.         if ((dialog = GetNewDialog(129,nil, kMoveToFront)) == nil){
  229.             SysBeep(3);
  230.             return;
  231.         }
  232.         SetPort(dialog);
  233.         GetDItem(dialog,2,&t,&h,&r);
  234.         SetIText(h, (ConstStr255Param)data);
  235.         DrawDefault(dialog);
  236.         while (itemHit != 1)
  237.             ModalDialog(nil, &itemHit);
  238.         DisposDialog(dialog);        
  239.         break;
  240.     case iLocalNum:
  241.         if ((GetHostName(&(addr[1]), 0)) < 0) {
  242.             SysBeep(3);
  243.             return;
  244.         }
  245.         addr[0] = strlen(&(addr[1]));            // Make it a pascal string
  246.         if ((dialog = GetNewDialog(130,nil, kMoveToFront)) == nil){
  247.             SysBeep(3);
  248.             return;
  249.         }
  250.         SetPort(dialog);
  251.         GetDItem(dialog,2,&t,&h,&r);
  252.         SetIText(h, (ConstStr255Param)addr);
  253.         DrawDefault(dialog);
  254.         while (itemHit != 1)
  255.             ModalDialog(nil, &itemHit);
  256.         DisposDialog(dialog);
  257.         break;
  258.     }
  259. }
  260.  
  261. void DoGetTime(char *host, char *port, char *data)
  262. {
  263.     int s, err, n= 1, tot = 0;
  264.     struct sockaddr_in sa;
  265.     
  266.     s = socket(kIgnored,kIgnored,IPPROTO_TCP);
  267.     if (s < 0) {
  268.         sprintf(data, (const char *)"\psocket() e%d, m%d", gErrno, gMacErrno);
  269.         goto foo;
  270.     }
  271.     
  272.     sa.sin_port = atoi(port);
  273.     sa.sin_addr = GetHostByName(host);
  274.     //sa.sin_addr = 0x90592866; alan's power mac
  275.     if (sa.sin_addr == 0) {
  276.         sprintf(data, (const char *)"\pGetHostByName() e%d, m%d", gErrno, gMacErrno);
  277.         goto foo;
  278.     }    
  279.     
  280.     if ((err = connect(s,&sa,kIgnored)) != noErr) {
  281.         sprintf(data, (const char *)"\pconnect error");
  282.         goto foo;
  283.     }
  284.     
  285.     while ((n=read(s, &(data[tot+1]), 100)) > 0) {
  286.         data[n + tot + 1] = '\0';
  287.         tot += n;  //keep a running total of length of bytes received.
  288.     }
  289.  
  290.     data[0] = strlen(&(data[1]));
  291.     while ((data[data[0]] == '\n') || (data[data[0]] == '\r')) data[0]--;  /* shave off the new line character */
  292.     
  293. foo:
  294.     if (close(s)) {
  295.         SysBeep(3);    /* beep discretely to report a close error */
  296.         //sprintf(str, (const char *)"\pclose error() e%d, m%d", gErrno, gMacErrno);
  297.         return;
  298.     }
  299. }
  300.     
  301.  
  302. void DoAbout(void)
  303. {
  304.     short itemHit = 0;
  305.     DialogPtr dialog;
  306.     
  307.     dialog = GetNewDialog(131, nil, kMoveToFront);
  308.     if (dialog == 0L){
  309.         SysBeep(3);
  310.         ExitToShell();
  311.     }
  312.     SetPort(dialog);
  313.     DrawDefault(dialog);
  314.     while (itemHit != 1)
  315.         ModalDialog(nil, &itemHit);
  316.     DisposDialog(dialog);
  317. }
  318.  
  319. /********** DrawDefault **********/
  320.  
  321. void DrawDefault(DialogPtr dialog)
  322. {
  323.     short    type;
  324.     Handle    dummy;
  325.     Rect    button;
  326.  
  327.     SetPort(dialog);
  328.     GetDItem(dialog,1,&type,&dummy,&button);
  329.     PenSize(3,3);
  330.     InsetRect(&button, -4,-4);
  331.     FrameRoundRect(&button,16,16);
  332. }
  333.